home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / rex.lha / rex / m2c / Errors.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  7KB  |  247 lines

  1. #include "SYSTEM_.h"
  2.  
  3. #ifndef DEFINITION_IO
  4. #include "IO.h"
  5. #endif
  6.  
  7. #ifndef DEFINITION_Strings
  8. #include "Strings.h"
  9. #endif
  10.  
  11. #ifndef DEFINITION_Idents
  12. #include "Idents.h"
  13. #endif
  14.  
  15. #ifndef DEFINITION_Positions
  16. #include "Positions.h"
  17. #endif
  18.  
  19. #ifndef DEFINITION_Strings
  20. #include "Strings.h"
  21. #endif
  22.  
  23. #ifndef DEFINITION_Errors
  24. #include "Errors.h"
  25. #endif
  26.  
  27.  
  28. #define IdentUndefined    10
  29. #define ImproperUse    11
  30. #define IdentDefBefore    12
  31. #define BraceMissing    13
  32. #define UnclosedComment    14
  33. #define PatternNoMatch    15
  34. #define UnclosedString    16
  35. static void WriteErrorMessage ARGS((CARDINAL ErrorCode, CARDINAL ErrorClass, Positions_tPosition Position));
  36. static void WriteInfo ARGS((CARDINAL InfoClass, ADDRESS Info));
  37. struct S_1 {
  38.     CHAR A[1023 + 1];
  39. };
  40.  
  41.  
  42. void Errors_ErrorMessage
  43. # ifdef __STDC__
  44. (CARDINAL ErrorCode, CARDINAL ErrorClass, Positions_tPosition Position)
  45. # else
  46. (ErrorCode, ErrorClass, Position)
  47. CARDINAL ErrorCode, ErrorClass;
  48. Positions_tPosition Position;
  49. # endif
  50. {
  51.   Errors_ErrorMessageI(ErrorCode, ErrorClass, Position, (LONGCARD)Errors_None, (ADDRESS)NIL);
  52. }
  53.  
  54. void Errors_ErrorMessageI
  55. # ifdef __STDC__
  56. (CARDINAL ErrorCode, CARDINAL ErrorClass, Positions_tPosition Position, CARDINAL InfoClass, ADDRESS Info)
  57. # else
  58. (ErrorCode, ErrorClass, Position, InfoClass, Info)
  59. CARDINAL ErrorCode, ErrorClass;
  60. Positions_tPosition Position;
  61. CARDINAL InfoClass;
  62. ADDRESS Info;
  63. # endif
  64. {
  65.   WriteErrorMessage(ErrorCode, ErrorClass, Position);
  66.   WriteInfo(InfoClass, Info);
  67.   IO_WriteNl((System_tFile)IO_StdError);
  68.   if (ErrorClass == Errors_Fatal) {
  69.     IO_CloseIO();
  70.     exit(1);
  71.   }
  72. }
  73.  
  74. static void WriteErrorMessage
  75. # ifdef __STDC__
  76. (CARDINAL ErrorCode, CARDINAL ErrorClass, Positions_tPosition Position)
  77. # else
  78. (ErrorCode, ErrorClass, Position)
  79. CARDINAL ErrorCode, ErrorClass;
  80. Positions_tPosition Position;
  81. # endif
  82. {
  83.   Positions_WritePosition((System_tFile)IO_StdError, Position);
  84.   IO_WriteS((System_tFile)IO_StdError, (STRING)": ", 2L);
  85.   switch (ErrorClass) {
  86.   case Errors_Fatal:;
  87.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Fatal       ", 12L);
  88.     break;
  89.   case Errors_Restriction:;
  90.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Restriction ", 12L);
  91.     break;
  92.   case Errors_Error:;
  93.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Error       ", 12L);
  94.     break;
  95.   case Errors_Warning:;
  96.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Warning     ", 12L);
  97.     break;
  98.   case Errors_Repair:;
  99.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Repair      ", 12L);
  100.     break;
  101.   case Errors_Note:;
  102.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Note        ", 12L);
  103.     break;
  104.   case Errors_Information:;
  105.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Information ", 12L);
  106.     break;
  107.   default :
  108.     IO_WriteS((System_tFile)IO_StdError, (STRING)"Error class: ", 13L);
  109.     IO_WriteI((System_tFile)IO_StdError, (LONGINT)ErrorClass, 0L);
  110.     break;
  111.   }
  112.   switch (ErrorCode) {
  113.   case Errors_NoText:;
  114.     break;
  115.   case Errors_SyntaxError:;
  116.     IO_WriteS((System_tFile)IO_StdError, (STRING)"syntax error", 12L);
  117.     break;
  118.   case Errors_ExpectedTokens:;
  119.     IO_WriteS((System_tFile)IO_StdError, (STRING)"expected tokens", 15L);
  120.     break;
  121.   case Errors_RestartPoint:;
  122.     IO_WriteS((System_tFile)IO_StdError, (STRING)"restart point", 13L);
  123.     break;
  124.   case Errors_TokenInserted:;
  125.     IO_WriteS((System_tFile)IO_StdError, (STRING)"token inserted ", 15L);
  126.     break;
  127.   case Errors_WrongParseTable:;
  128.     IO_WriteS((System_tFile)IO_StdError, (STRING)"parse table mismatch", 20L);
  129.     break;
  130.   case Errors_OpenParseTable:;
  131.     IO_WriteS((System_tFile)IO_StdError, (STRING)"cannot open parse table", 23L);
  132.     break;
  133.   case Errors_ReadParseTable:;
  134.     IO_WriteS((System_tFile)IO_StdError, (STRING)"cannot read parse table", 23L);
  135.     break;
  136.   case IdentUndefined:;
  137.     IO_WriteS((System_tFile)IO_StdError, (STRING)"identifier undefined", 20L);
  138.     break;
  139.   case ImproperUse:;
  140.     IO_WriteS((System_tFile)IO_StdError, (STRING)"improper use of identifier", 26L);
  141.     break;
  142.   case IdentDefBefore:;
  143.     IO_WriteS((System_tFile)IO_StdError, (STRING)"identifier already defined", 26L);
  144.     break;
  145.   case BraceMissing:;
  146.     IO_WriteS((System_tFile)IO_StdError, (STRING)"closing '}' missing", 19L);
  147.     break;
  148.   case UnclosedComment:;
  149.     IO_WriteS((System_tFile)IO_StdError, (STRING)"unclosed comment", 16L);
  150.     break;
  151.   case PatternNoMatch:;
  152.     IO_WriteS((System_tFile)IO_StdError, (STRING)"pattern will never match", 24L);
  153.     break;
  154.   case UnclosedString:;
  155.     IO_WriteS((System_tFile)IO_StdError, (STRING)"unclosed string", 15L);
  156.     break;
  157.   default :
  158.     IO_WriteS((System_tFile)IO_StdError, (STRING)" error code: ", 13L);
  159.     IO_WriteI((System_tFile)IO_StdError, (LONGINT)ErrorCode, 0L);
  160.     break;
  161.   }
  162. }
  163.  
  164. static void WriteInfo
  165. # ifdef __STDC__
  166. (CARDINAL InfoClass, ADDRESS Info)
  167. # else
  168. (InfoClass, Info)
  169. CARDINAL InfoClass;
  170. ADDRESS Info;
  171. # endif
  172. {
  173.   INTEGER *PtrToInteger;
  174.   SHORTCARD *PtrToShort;
  175.   LONGINT *PtrToLong;
  176.   REAL *PtrToReal;
  177.   BOOLEAN *PtrToBoolean;
  178.   CHAR *PtrToCharacter;
  179.   Strings_tString *PtrToString;
  180.   struct S_1 *PtrToArray;
  181.   Idents_tIdent *PtrToIdent;
  182.  
  183.   if (InfoClass == Errors_None) {
  184.     return;
  185.   }
  186.   IO_WriteS((System_tFile)IO_StdError, (STRING)": ", 2L);
  187.   switch (InfoClass) {
  188.   case Errors_Integer:;
  189.     PtrToInteger = (LONGINT *)Info;
  190.     IO_WriteI((System_tFile)IO_StdError, *PtrToInteger, 0L);
  191.     break;
  192.   case Errors_Short:;
  193.     PtrToShort = (SHORTCARD *)Info;
  194.     IO_WriteI((System_tFile)IO_StdError, (LONGINT)(*PtrToShort), 0L);
  195.     break;
  196.   case Errors_Long:;
  197.     PtrToLong = (LONGINT *)Info;
  198.     IO_WriteLong((System_tFile)IO_StdError, *PtrToLong, 0L);
  199.     break;
  200.   case Errors_Real:;
  201.     PtrToReal = (REAL *)Info;
  202.     IO_WriteR((System_tFile)IO_StdError, *PtrToReal, 1L, 10L, 1L);
  203.     break;
  204.   case Errors_Boolean:;
  205.     PtrToBoolean = (BOOLEAN *)Info;
  206.     IO_WriteB((System_tFile)IO_StdError, *PtrToBoolean);
  207.     break;
  208.   case Errors_Character:;
  209.     PtrToCharacter = (CHAR *)Info;
  210.     IO_WriteC((System_tFile)IO_StdError, *PtrToCharacter);
  211.     break;
  212.   case Errors_String:;
  213.     PtrToString = (Strings_tString *)Info;
  214.     Strings_WriteS((System_tFile)IO_StdError, PtrToString);
  215.     break;
  216.   case Errors_Array:;
  217.     PtrToArray = (struct S_1 *)Info;
  218.     IO_WriteS((System_tFile)IO_StdError, (*PtrToArray).A, 1024L);
  219.     break;
  220.   case Errors_Ident:;
  221.     PtrToIdent = (SHORTCARD *)Info;
  222.     Idents_WriteIdent((System_tFile)IO_StdError, *PtrToIdent);
  223.     break;
  224.   default :
  225.     IO_WriteS((System_tFile)IO_StdError, (STRING)"info class: ", 12L);
  226.     IO_WriteI((System_tFile)IO_StdError, (LONGINT)InfoClass, 0L);
  227.     break;
  228.   }
  229. }
  230.  
  231. void BEGIN_Errors()
  232. {
  233.   static BOOLEAN has_been_called = FALSE;
  234.  
  235.   if (!has_been_called) {
  236.     has_been_called = TRUE;
  237.  
  238.     BEGIN_Positions();
  239.     BEGIN_IO();
  240.     BEGIN_Strings();
  241.     BEGIN_Idents();
  242.     BEGIN_Positions();
  243.     BEGIN_Strings();
  244.  
  245.   }
  246. }
  247.